home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-04-03 | 14.1 KB | 522 lines | [TEXT/MPS ] |
- //----------------------------------------------------------------------------------------
- // UEvent.cp
- // Copyright © 1984-96 by Apple Computer, Inc. All rights reserved.
- //----------------------------------------------------------------------------------------
-
- #ifndef __UEVENT__
- #include "UEvent.h"
- #endif
-
- // MacApp
-
- #ifndef __UCOREUTILITIES__
- #include "UCoreUtilities.h"
- #endif
-
- #ifndef __UDISPATCHER__
- #include "UDispatcher.h"
- #endif
-
- #ifndef __UEVENTHANDLER__
- #include "UEventHandler.h"
- #endif
-
- // Toolbox
-
- #ifndef __EPPC__
- #include <EPPC.h>
- #endif
-
- #ifndef __RESOURCES__
- #include <Resources.h>
- #endif
-
- #ifndef __TOOLUTILS__
- #include <ToolUtils.h>
- #endif
-
- #ifndef __WINDOWS__
- #include <Windows.h>
- #endif
-
- // ANSI
-
- #ifndef __STDIO__
- #include <stdio.h>
- #endif
-
-
- //========================================================================================
- // CLASS TEvent
- //========================================================================================
- #undef Inherited
- #define Inherited TObject
-
- #pragma segment MAEvtHandlerNonRes
- MA_DEFINE_CLASS_M1(TEvent, Inherited);
-
- //----------------------------------------------------------------------------------------
- // TEvent constructor
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- TEvent::TEvent() :
- fIdentifier(cNoEvent),
- fSource(NULL),
- fHandler(NULL),
- fAffectsMenus(FALSE),
- fPriority(kPriorityNormal) // Don't worry, be happy!
- {
- }
-
- //----------------------------------------------------------------------------------------
- // TEvent::IEvent:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- void TEvent::IEvent(EventNumber itsEventNumber,
- TEventHandler* itsSource,
- TEventHandler* itsHandler)
- {
- IObject();
-
- fIdentifier = itsEventNumber;
- fSource = itsSource;
- fHandler = itsHandler;
- }
-
- //----------------------------------------------------------------------------------------
- // TEvent::Free:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- TEvent::~TEvent()
- {
- #if qDebug
- if (gDispatcher)
- {
- TEventList* eventList = gDispatcher->fEventList;
- if (eventList)
- {
- if (eventList->GetIdentityItemNo(this) != 0)
- ProgramBreak("You are trying to free an event that is still on the event queue.");
- }
- }
- #endif
- }
-
- //----------------------------------------------------------------------------------------
- // TEvent::GetHandler:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- TEventHandler* TEvent::GetHandler()
- {
- return fHandler ? fHandler : gDispatcher;
- }
-
- //----------------------------------------------------------------------------------------
- // TEvent::ShouldFreeOnCompletion:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- Boolean TEvent::ShouldFreeOnCompletion()
- {
- return TRUE;
- }
-
- //----------------------------------------------------------------------------------------
- // TEvent::IsReadyToPost:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- Boolean TEvent::IsReadyToPost()
- {
- return TRUE;
- }
-
- //----------------------------------------------------------------------------------------
- // TEvent::IsReadyToExecute:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- Boolean TEvent::IsReadyToExecute()
- {
- return TRUE;
- }
-
- //----------------------------------------------------------------------------------------
- // TEvent::IsRecurring:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- Boolean TEvent::IsRecurring()
- {
- return FALSE;
- }
-
- //----------------------------------------------------------------------------------------
- // TEvent::Process:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- void TEvent::Process()
-
- {
- TEventHandler* handler = GetHandler();
-
- if (handler)
- handler->HandleEvent(fIdentifier,fSource,this);
- }
-
- #if qDebug
- //----------------------------------------------------------------------------------------
- // TEvent::ReportEvent:
- //----------------------------------------------------------------------------------------
- #pragma segment MADebug
-
- void TEvent::ReportEvent()
- {
- }
- #endif
-
-
- //========================================================================================
- // CLASS TToolboxEvent
- //========================================================================================
- #undef Inherited
- #define Inherited TEvent
-
- #pragma segment MAEvtHandlerNonRes
- MA_DEFINE_CLASS_M1(TToolboxEvent, Inherited);
-
- //----------------------------------------------------------------------------------------
- // TToolboxEvent::TToolboxEvent:
- //----------------------------------------------------------------------------------------
- #pragma segment ConstructorRes
-
- TToolboxEvent::TToolboxEvent() :
- fEventRecord(fEventRecords[0]),
- fCharacter(fText[1]),
- fDoubleEvent(FALSE)
- {
- }
-
- //----------------------------------------------------------------------------------------
- // TToolboxEvent destructor
- //----------------------------------------------------------------------------------------
- #pragma segment MADestructorRes
-
- TToolboxEvent::~TToolboxEvent()
- {
- }
-
- //----------------------------------------------------------------------------------------
- // TToolboxEvent::IToolboxEvent:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- Boolean TToolboxEvent::IToolboxEvent(TEventHandler* itsHandler,
- const EventRecord& theEvent)
-
- {
- Boolean returnVal = FALSE;
-
- IEvent(cNoCommand, NULL, itsHandler);
-
- fIdentifier = (long) theEvent.what;
- fEventRecords[0] = theEvent;
- fClickCount = 0;
- fText.Empty(); // Default, we don't know if this is a keystroke yet
- fKeyScript = (short)GetScriptManagerVariable(smKeyScript);
- fKeyCode = 0; // Default, we don't know if this is a keystroke yet
- fAffectsMenus = TRUE; // assume going in that this event affects the menus
-
- fDoubleEvent = FALSE;
- // Check to see if this event is the first of a two event sequence the toolbox uses to get
- // multibyte characters to us.
- if ((fEventRecord.what == keyDown) || (fEventRecord.what == keyUp) || (fEventRecord.what == autoKey))
- {
- unsigned char theCharacter = (unsigned char)(fEventRecord.message & charCodeMask);
- returnVal = MACharacterByteType((Ptr)&theCharacter, 0, fKeyScript) == smFirstByte;
- }
-
- return returnVal;
- }
-
- //----------------------------------------------------------------------------------------
- // TToolboxEvent::AddSecondaryKeyEvent:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- void TToolboxEvent::AddSecondaryKeyEvent(const EventRecord& theEvent)
- {
- fDoubleEvent = TRUE;
- fEventRecords[1] = theEvent;
- }
-
- //----------------------------------------------------------------------------------------
- // TToolboxEvent::IsButtonPressed:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- Boolean TToolboxEvent::IsButtonPressed() const
- {
- return ((fEventRecord.modifiers) & btnState) != 0;
- }
-
- //----------------------------------------------------------------------------------------
- // TToolboxEvent::IsCommandKeyPressed:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- Boolean TToolboxEvent::IsCommandKeyPressed() const
- {
- return ((fEventRecord.modifiers) & cmdKey) != 0;
- }
-
- //----------------------------------------------------------------------------------------
- // TToolboxEvent::IsShiftKeyPressed:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- Boolean TToolboxEvent::IsShiftKeyPressed() const
- {
- return ((fEventRecord.modifiers) & shiftKey) != 0;
- }
-
- //----------------------------------------------------------------------------------------
- // TToolboxEvent::IsAlphaLock:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- Boolean TToolboxEvent::IsAlphaLock() const
- {
- return ((fEventRecord.modifiers) & alphaLock) != 0;
- }
-
- //----------------------------------------------------------------------------------------
- // TToolboxEvent::IsOptionKeyPressed:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- Boolean TToolboxEvent::IsOptionKeyPressed() const
- {
- return ((fEventRecord.modifiers) & optionKey) != 0;
- }
-
- //----------------------------------------------------------------------------------------
- // TToolboxEvent::IsControlKeyPressed:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- Boolean TToolboxEvent::IsControlKeyPressed() const
- {
- return ((fEventRecord.modifiers) & controlKey) != 0;
- }
-
- //----------------------------------------------------------------------------------------
- // TToolboxEvent::IsAutoKeyEvent:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- Boolean TToolboxEvent::IsAutoKeyEvent() const
- {
- return fEventRecord.what == autoKey;
- }
-
- //----------------------------------------------------------------------------------------
- // TToolboxEvent::Process:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- void TToolboxEvent::Process()
- {
- gDispatcher->HandleToolboxEvent(this);
- }
-
-
- //----------------------------------------------------------------------------------------
- // TToolboxEvent::RemoveDependenciesOnFree:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- Boolean TToolboxEvent::RemoveDependenciesOnFree()
- {
- // TToolboxEvents are short time objects that really shouldn't carry the burden of
- // managing dependent objects. Rather concentrate on the command objects that are
- // generated by an event.
- return FALSE;
- }
-
- #if qDebug
- //----------------------------------------------------------------------------------------
- // TToolboxEvent::ReportEvent:
- //----------------------------------------------------------------------------------------
- #pragma segment MADebug
-
- void TToolboxEvent::ReportEvent() // override
- {
- short ch;
- short cap;
- CStr255 aString;
- CStr63 mods;
- WindowRef aWMgrWindow;
- CPoint localWhere;
-
- fprintf(stderr, "t = %d", fEventRecord.when);
- mods = " ---------";
- // 1234567890
-
- if (IsControlKeyPressed())
- mods[2] = 'C';
- if (IsOptionKeyPressed())
- mods[3] = 'O';
- if (IsAlphaLock())
- mods[4] = 'L';
- if (IsShiftKeyPressed())
- mods[5] = 'S';
- if (IsCommandKeyPressed())
- mods[6] = 'C';
- if (IsButtonPressed())
- mods[7] = 'M';
- if (fEventRecord.what == activateEvt)
- if (((fEventRecord.modifiers) & activeFlag) != 0)
- mods[8] = 'A';
- else
- mods[8] = 'D';
- fprintf(stderr, "%s", (const char*)mods);
-
- switch (fEventRecord.what)
- {
- case nullEvent:
- fprintf(stderr, "nullEvent\n");
- break;
- case mouseDown:
- case mouseUp:
- if (fEventRecord.what == mouseDown)
- fprintf(stderr, "mouseDown ");
- else
- fprintf(stderr, "mouseUp ");
- fprintf(stderr, "%s", (const char*)CPoint(fEventRecord.where));
- switch (FindWindow(fEventRecord.where, &aWMgrWindow))
- {
- case inMenuBar:
- aString = "inMenuBar";
- break;
-
- case inSysWindow:
- aString = "inSysWindow";
- break;
-
- case inDrag:
- aString = "inDrag";
- break;
-
- case inGrow:
- aString = "inGrow";
- break;
-
- case inGoAway:
- aString = "inGoAway";
- break;
-
- case inContent:
- aString = "inContent";
- break;
-
- case inZoomIn:
- aString = "inZoomIn";
- break;
-
- case inZoomOut:
- aString = "inZoomOut";
- break;
-
- default:
- aString = "Mouse clicked in an unknown place.";
- break;
- }
-
- fprintf(stderr, "%5s\n", (const char*)aString);
- break;
- case keyDown:
- case autoKey:
- case keyUp:
- if (fEventRecord.what == keyDown)
- fprintf(stderr, "keyDown ");
- else if (fEventRecord.what == autoKey)
- fprintf(stderr, "autoKey ");
- else
- fprintf(stderr, "keyUp ");
-
- ch = (short)(fEventRecord.message & charCodeMask);
- cap = (short)(fEventRecord.message >> 8);
-
- if ((ch >= 0x20) && (ch <= 0xD8) && (ch != 0x7F))
- fprintf(stderr, "\"%c\"", ch);
- else
- fprintf(stderr, " ");
-
- fprintf(stderr, "( %1d / %1d )\n", ch, cap);
- break;
-
- case updateEvt:
- case activateEvt:
- if (fEventRecord.what == updateEvt)
- fprintf(stderr, "updateEvt ");
- else
- fprintf(stderr, "activateEvt ");
-
- GetWTitle((WindowRef)(fEventRecord.message), aString);
- fprintf(stderr, "\"%s\"\n", (const char*)aString);
- break;
-
- case diskEvt:
- fprintf(stderr, "diskEvt d = %1d e = %1d \n", LoWord(fEventRecord.message), HiWord(fEventRecord.message));
- break;
-
- case osEvt:
- switch ((((fEventRecord.message) & osEvtMessageMask)) >> 24)
- {
- case suspendResumeMessage:
- if (fEventRecord.message & 1)
- fprintf(stderr, "resume ");
- else
- fprintf(stderr, "suspend ");
- break;
-
- case mouseMovedMessage:
- {
- fprintf(stderr, "mouse moved ");
- fprintf(stderr, "%s", (const char*)CPoint(fEventRecord.where));
- break;
- }
-
- default:
- fprintf(stderr, "osEvt ");
- break;
- }
- WrLblHexLongint(", message", fEventRecord.message);
- fprintf(stderr, "\n");
- break;
-
- case kHighLevelEvent:
- WrLblHexLongint("kHighLevelEvent , message", fEventRecord.message);
- fprintf(stderr, "\n");
- break;
-
- default:
- fprintf(stderr, "??? unknown = %1d ", fEventRecord.what);
- WriteHexLongint(fEventRecord.message);
- break;
- }
- }
-
- #endif
-
- //----------------------------------------------------------------------------------------
- // End of UEvent.cp
-
- #pragma segment Inline
-